package com.shujia.core

import org.apache.spark.{SparkConf, SparkContext}

object Demo5GroupBy {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
      .setMaster("local") //本地运行
      .setAppName("Demo4Sample")

    val sc = new SparkContext(conf)

    val studentRDD = sc.textFile("data/student.txt")

    /**
      * 统计班级学生的人数
      *
      */

    val kvRDD = studentRDD.map(line => {
      val clazz = line.split(",")(4)
      (clazz, 1)
    })

    /* val groupRDD = kvRDD.groupByKey() //通过第一个字段进行分组

     val sumRDD = groupRDD.map(kv => {
       val clazz = kv._1
       val sum = kv._2.sum
       (clazz, sum)
     })

     sumRDD.foreach(println)*/

    /* kvRDD
       .groupBy(_._1)
       .map(kv => {
         val sum = kv._2.map(_._2).sum

         (kv._1, sum)
       })
       .foreach(println)*/

    //通过reduceBykey实现

    /**
      * reducebyKey  主内聚合
      * 想通过key进行分组
      * 再在组内进行聚合   （一般只能进行加和）
      *
      * 在map段有预聚合  效率比groupbykey高
      *
      */

    kvRDD
      .reduceByKey((x, y) => x + y)
      .foreach(println)


  }

}
